package cn.jasonone.jasonfx.util;

import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;

/**
 * 注解工具类
 * 
 * @author Jason
 * @date: 2020-01-12 15:53
 */
public class AnnotationUtil {
	/**
	 * 检测指定注解是否都存在
	 * 
	 * @param element         待检测对象
	 * @param annotationTypes 注解类型列表
	 * @return true:存在 false:不存在
	 */
	@SafeVarargs
	public static boolean isAnnotations(AnnotatedElement element, Class<? extends Annotation>...annotationTypes) {
		boolean result=true;
		for (Class<? extends Annotation> class1 : annotationTypes) {
			result&=element.isAnnotationPresent(class1);
		}
		return result;
	}

	/**
	 * 获得指定类型的注解
	 * 
	 * @param <T>             注解类型
	 * @param element         待获取对象
	 * @param annotationClass 注解类
	 * @return 注解实例
	 */
	public static <T extends Annotation> T getAnnotation(AnnotatedElement element, Class<T> annotationClass) {
		if (isAnnotations(element, annotationClass)) {
			return element.getAnnotation(annotationClass);
		}
		return null;
	}
}
